Vim keybindings for CM6
![NPM version badge](https://img.shields.io/npm/v/@replit/codemirror-vim?color=blue)
Installation
npm i @replit/codemirror-vim
Usage
import { basicSetup, EditorView } from 'codemirror';
import { vim } from "@replit/codemirror-vim"
let view = new EditorView({
doc: "",
extensions: [
vim(),
basicSetup,
],
parent: document.querySelector('#editor'),
})
Note:
if you are not using basicSetup
, make sure you include the drawSelection plugin to correctly render the selection in visual mode.
Usage of cm5 vim extension api
The same api that could be used in previous version of codemirror https://codemirror.net/doc/manual.html#vimapi, can be used with this plugin too, just replace the old editor instance with view.cm
in your code
import {Vim, getCM} from "@replit/codemirror-vim"
let cm = getCM(view)
Vim.exitInsertMode(cm)
Vim.handleKey(cm, "<Esc>")
Define additional ex commands
Vim.defineEx('write', 'w', function() {
});
Map keys
Vim.map("jj", "<Esc>", "insert");
Vim.map("Y", "y$");
Unmap keys
Vim.unmap("jj", "insert");
Add custom key
defaultKeymap.push({ keys: 'gq', type: 'operator', operator: 'hardWrap' });
Vim.defineOperator("hardWrap", function(cm, operatorArgs, ranges, oldAnchor, newHead) {
});